<?php


namespace app\api\controller;


use think\Controller;
use think\Request;

class File extends Controller
{
    /**
     * 图标上传
     */
    public function upload(Request $request)
    {
        try {
            // 使用 think\facade\Filesystem 处理文件上传
            $file = $request->file('file');

            if (!$file) {
                return json([
                    'code' => 400,
                    'message' => '请选择文件'
                ]);
            }

            // 验证文件类型
            $allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];
            $fileInfo = $file->getInfo();

            if (!in_array($fileInfo['type'], $allowedTypes)) {
                return json([
                    'code' => 400,
                    'message' => '只支持 JPG、JPEG、PNG、WebP 格式的图片'
                ]);
            }

            // 验证文件大小（2MB）
            if ($fileInfo['size'] > 2 * 1024 * 1024) {
                return json([
                    'code' => 400,
                    'message' => '图片大小不能超过2MB'
                ]);
            }

            // 创建上传目录
            $savePath = 'uploads/icons/';
            if (!is_dir('./' . $savePath)) {
                mkdir('./' . $savePath, 0755, true);
            }

            // 移动文件到目标目录
            $info = $file->move('./' . $savePath);

            if ($info) {
                $fileName = $info->getFilename();
                $filePath = $savePath . '/' . date('Ymd') . '/' . $fileName;

                // 返回完整的可访问URL
                $domain = $request->domain();
                $url = $domain . '/' . $filePath;

                return json([
                    'code' => 200,
                    'message' => '上传成功',
                    'data' => [
                        'path' => $filePath,
                        'url' => $url,
                        'fileName' => $fileName
                    ]
                ]);
            } else {
                return json([
                    'code' => 500,
                    'message' => '上传失败：' . $file->getError()
                ]);
            }

        } catch (\Exception $e) {
            return json([
                'code' => 500,
                'message' => '服务器错误：' . $e->getMessage()
            ]);
        }
    }
}